/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package p3;
import p3.logicaNegocio.Producto;
import p3.logicaNegocio.Pedido;
import p3.logicaNegocio.Comprador;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author pargon
 */
public class accesoBD {
    Connection conexionBD;
    public accesoBD(){conexionBD = null;}
    public void abrirConexionBD() {
        if (conexionBD == null)
        {
            String tablaConexionBD = "jdbc:mysql://localhost/tienda"; //Conexión con nuestra BD
            try{
                Class.forName("com.mysql.jdbc.Driver"); //El driver de mysql
                //Conexión teniendo en cuenta el usuario y clave de administrador de la BD
                conexionBD = DriverManager.getConnection(tablaConexionBD, "root","123");
            }
            catch(Exception e){
                e.printStackTrace();
    //Error en la conexión con la BD
                System.out.println("No se ha completado la peticion...");
            }
        }
    }
    
    
   public boolean comprobarUsuarioBD(String usuario, String clave) {
    if (conexionBD == null) //Se comprueba que la conexión con la BD esté abierta
    {
        abrirConexionBD();
    }
    ResultSet resultados = null;
    
    try{
        String con;
        Statement s = conexionBD.createStatement();
        //Consulta, buscamos una correspondencia usuario/clave
        con = "SELECT usuario FROM `usuarios` WHERE usuario='" + usuario + "' and clave='" + clave + "'";
        resultados = s.executeQuery(con);
        resultados.next();
        return resultados.getString(1).equals(usuario);
        
    }
    catch(Exception e){
    //Error en la conexión con la BD
    System.out.println("No se ha completado la peticion...");
    return false;
    }
  }
   public void insertarUsuarioBD(String usuario, String clave) {
    if (conexionBD == null) //Se comprueba que la conexión con la BD esté abierta
    {
        abrirConexionBD();
    }
    ResultSet resultados = null;
    try{
        String con;
        Statement s = conexionBD.createStatement();
        //Consulta, buscamos una correspondencia usuario/clave
        con = "INSERT INTO `usuarios` (`id` ,`usuario` ,`clave`) VALUES (NULL , '" + usuario + "', '" + clave + "')";
        //resultados = s.executeQuery(con);
        s.executeUpdate(con);
    }
    catch(Exception e){
    //Error en la conexión con la BD
    System.out.println("No se ha completado la peticion...");
    }
   }
   public ResultSet getCervezas() {
      ResultSet res = null;
      try {
            if (conexionBD == null) abrirConexionBD();
            String con;
            Statement s = conexionBD.createStatement();
            con = "SELECT id,nombre,precio,descripcion,stock,imagen FROM productos WHERE 1 = 1";
            res = s.executeQuery(con);
            return res;
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
   }
   public boolean userExists(String us) {
        try {
            if(conexionBD == null) { abrirConexionBD();}
            String con = "SELECT * FROM usuarios WHERE usuario = '" + us+"'";
            ResultSet res = conexionBD.createStatement().executeQuery(con);
            res.next();
            return !res.wasNull();
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
          return true;
   }

    public Producto getBirra(Integer i) {
        try {
            if(conexionBD == null) abrirConexionBD();
            String con = "SELECT id,nombre,precio,descripcion,stock,imagen  FROM productos WHERE id="+i;
            ResultSet res = conexionBD.createStatement().executeQuery(con);
            res.next();
            Producto p = new Producto();
            p.setIdProducto(res.getInt(1));
            p.setNombre(res.getString(2));
            p.setDescripcion(res.getString(4));
            p.setPrecio(res.getFloat(3));
            p.setStock(res.getInt(5));
            p.setRutaFoto(res.getString(6));
            p.setCantidad(1);
            
            return p;
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    return null;
    }

    void quitarProducto(Producto p) {
        try {
            if (conexionBD == null) abrirConexionBD();
            String con = "UPDATE productos SET stock = stock -" + p.getCantidad() + " WHERE id =" + p.getIdProducto();
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    boolean comprobarAdminBD(String usuario, String clave) {
    if (conexionBD == null) //Se comprueba que la conexión con la BD esté abierta
    {
        abrirConexionBD();
    }
    ResultSet resultados = null;
    
    try{
        String con;
        Statement s = conexionBD.createStatement();
        //Consulta, buscamos una correspondencia usuario/clave
        con = "SELECT usuario FROM `admin` WHERE usuario='" + usuario + "' and clave='" + clave + "'";
        resultados = s.executeQuery(con);
        resultados.next();
        return resultados.getString(1).equals(usuario);
        
    }
    catch(Exception e){
    //Error en la conexión con la BD
    System.out.println("No se ha completado la peticion...");
    return false;
    }    
    }
    public ResultSet getUsuarios() {
        try {
            if(conexionBD == null) abrirConexionBD();
            String con;
            con = "SELECT id, usuario, clave FROM usuarios";
            Statement s = conexionBD.createStatement();
            return s.executeQuery(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    void eliminarUsuario(String id) {
        try {
            if (conexionBD == null) {abrirConexionBD();}
            String con;
            con = "DELETE FROM usuarios WHERE usuario= '"+id +"'";
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    void anadirCliente(Comprador c, String us) {
        try {
            if(conexionBD == null) abrirConexionBD();
            String con;
            String usuario = us;
            //con = "SELECT id FROM `usuarios` WHERE `usuario` = '"+us+"'"; 
            //Statement a = conexionBD.createStatement();
            //ResultSet rs = a.executeQuery(con);
            //while(rs.next()) usuario = rs.getInt(1) +"";
            con = "INSERT INTO `clientes` (`nombre` ,`direccion` ,`dni`,`tarjeta`,`usuario`)"+
                    " VALUES ('"+ c.getNombre()+"','"+ c.getDireccion()+ "','" + c.getDNI() + "','"+c.getTarjeta() +"','"+usuario+"')";
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    int anadirPedido(ArrayList<Producto> carrito,Comprador c) {
        try {
            if (conexionBD == null) abrirConexionBD();
            String con;
            con = "SELECT max(`pedido`) FROM pedido";
            Statement s = conexionBD.createStatement();
            ResultSet rs = s.executeQuery(con);
            Integer i = 0;
            while(rs.next()){
                rs.getInt(1);
                if(!rs.wasNull())  
                    i = (rs.getInt(1));
                
            }
            
            for (Producto p: carrito){
                s = conexionBD.createStatement();
                con = "INSERT INTO `pedido` (`pedido`,`producto`,`cantidad`,`cliente`) " +
                    "VALUES ('" + (i+1) + "','" + p.getIdProducto() + "','" + p.getCantidad()+"','" + c.getDNI()+"')";
                s.executeUpdate(con);
            }
            return i+1;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return -1;
        }
   }
    public ResultSet getClientes() {
        try {
            if(conexionBD == null) abrirConexionBD();
            String con = "SELECT nombre,direccion,dni,tarjeta,usuario FROM clientes";
            Statement s = conexionBD.createStatement();
            return s.executeQuery(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    void eliminarCliente(String id) {
        try {
            if (conexionBD == null) {abrirConexionBD();}
            String con;
            con = "DELETE FROM clientes WHERE dni= '"+id +"'";
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public ArrayList<Pedido> getPedidos() {
        try {
            ArrayList<Pedido> aL = new ArrayList<Pedido>();
            Pedido p = new Pedido();
            String id;
            if(conexionBD == null) abrirConexionBD();
            String con = "SELECT pedido,producto,cantidad,cliente FROM pedido GROUP BY pedido";
            Statement s = conexionBD.createStatement();
            ResultSet rs = s.executeQuery(con);
            boolean PrimIt = true;
            while(rs.next()) {
                p.addCerveza(Integer.parseInt(rs.getNString(2)), Integer.parseInt(rs.getNString(3)));
                id = rs.getNString(1);
                if(!id.equals(p.getIdpedido()) && p.getIdpedido()!= null) {
                    aL.add(p);
                    p = new Pedido();
                    PrimIt = true; 
                }
                if (PrimIt) {
                    PrimIt = false;
                    p.setIdCliente(rs.getNString(4));
                    p.setIdpedido(id);
                }
            }
            return aL;

            
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    void eliminarPedido(String id) {
        try {
            if(conexionBD == null) abrirConexionBD();
            String con = "DELETE FROM pedido WHERE pedido = '"+id+"'";
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    void updateProducto(String idProducto, String nombre, String precio, String descripcion, String stock, String imgsrc) {
        try {
            if (conexionBD == null) abrirConexionBD();
            String con = "UPDATE productos SET nombre='" + nombre + "'"
                    + ", precio ='" + precio + "', descripcion='" + descripcion + "', "
                    + "stock='" + stock + "', imagen='" + imgsrc + "' "
                    + "WHERE id='" + idProducto +"'";
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    void eliminarProducto(String id) {
        try {
            if(conexionBD==null) abrirConexionBD();
            String con = "DELETE FROM productos WHERE id= '"+id +"'";
            Statement s = conexionBD.createStatement();
            s.executeUpdate(con);
        } catch (SQLException ex) {
            Logger.getLogger(accesoBD.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
